package com.cn;

import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.repository.Deployment;
import org.flowable.task.api.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 *候选人审批方式
 */
@SpringBootTest
public class flowableTest03 {

    @Autowired
    RepositoryService repositoryService;

    @Autowired
    RuntimeService runtimeService;

    @Autowired
    TaskService taskService;

    @Test
    void testFlowable03(){
        Deployment deploy = repositoryService.createDeployment()
                //获取数据路径
                .addClasspathResource("process01-基础/候选人.bpmn20.xml")
                //名称
                .name("候选人")
                //部署方法吧
                .deploy();
        System.out.println("deploy.getId() ="+deploy.getId());
    }

    /**
     * 启动程序
     */
    @Test
    void startProcess(){
        //来自 act_re_procdef
        String startProcess = "候选人:1:662c6107-b05f-11ee-a9ee-30d04231d1ff";
        //添加候选人列表的方式
        Map<String,Object> map = new HashMap<>();
        map.put("candidate1","百里一天");
        map.put("candidate2","百里二天");
        map.put("candidate3","百里三天");
        runtimeService.startProcessInstanceById(startProcess,map);
    }

    /**
     * 根据候选人查询代办信息
     * 这里信息是候选人不是审批这里需要把候选人换成审批人的方式
     * 方式 成为拾取
     */
    @Test
    void taskQuery(){
        List<Task> list = taskService.createTaskQuery()
                .taskCandidateUser("百里一天")
                .list();
        for (Task task : list) {
            System.out.println("task.getId()="+task.getId());
        }
    }

    /**
     * 候选人换成审批人的方式
     */
    @Test
    void claimDemos(){
        List<Task> list = taskService.createTaskQuery()
                //拾取
                .taskCandidateUser("百里一天")
                .list();
        for (Task task : list) {
            taskService.claim(task.getId(),"百里一天");
        }
    }

    /**
     * 创建拾取归还的方式
     */
    @Test
    void unclaimDemos(){
        List<Task> list = taskService.createTaskQuery()
                //审批归还的操作方式
                .taskAssignee("百里一天")
                .list();
        for (Task task : list) {
            taskService.unclaim(task.getId());
        }
    }

    /**
     * 指派的方式
     */
    @Test
    void assignee(){
        List<Task> list = taskService.createTaskQuery()
                //审批归还的操作方式
                .taskAssignee("百里一天")
                .list();
        for (Task task : list) {
            taskService.setAssignee(task.getId(),"李二白");
        }
    }
}
